const express = require('express');
const cors = require('cors');
const morgan = require('morgan');
require('dotenv').config();

const app = express();
const PORT = process.env.PORT || 3000;

// 中间件
app.use(cors({
  origin: ['http://localhost:5173', 'http://localhost:5174', 'http://localhost:3000', 'http://localhost:8002'], // 允许的前端地址
  credentials: true,
  methods: ['GET', 'POST', 'PUT', 'DELETE', 'OPTIONS'],
  allowedHeaders: ['Content-Type', 'Authorization']
}));
app.use(morgan('dev'));
app.use(express.json());
app.use(express.urlencoded({ extended: true }));

// 基础路由已移至静态文件服务之后，通过静态文件服务提供前端页面

// API路由
const apiRoutes = require('./routes/api');
app.use('/api/demo', apiRoutes);

// 配置静态文件服务，提供前端打包后的文件
const path = require('path');
const frontendDistPath = path.resolve(__dirname, '../1-shop/dist');
app.use(express.static(frontendDistPath));

// 处理SPA路由，当API请求未匹配时返回index.html
// 使用中间件方式来处理所有未匹配的路由
app.use((req, res, next) => {
  // 检查请求是否以/api开头（API请求）
  if (req.path.startsWith('/api')) {
    next(); // 继续传递给后续的错误处理中间件
  } else {
    // 非API请求，返回index.html
    res.sendFile(path.join(frontendDistPath, 'index.html'));
  }
});

// 错误处理中间件
app.use((err, req, res, next) => {
  console.error(err.stack);
  res.status(500).json({
    errno: 1,
    message: '服务器内部错误',
    error: process.env.NODE_ENV === 'development' ? err.message : 'Internal Server Error'
  });
});

app.listen(PORT, () => {
  console.log(`Server is running on port ${PORT}`);
});

module.exports = app;